/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Metodos;


import java.util.Scanner;
import static Metodos.MetodosUtiles.*;
import java.util.ArrayList;

/**
 *  import static Metodos.MetodosMatrices.*;
 * @author vesprada
 */
public class MetodosMatrices {


    public static void mostrarMatrizCuadricula(int[][] x) {
        linea();
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                System.out.print(" | " + x[f][c]);
            }
            System.out.println(" |");
        }
        linea();
    }

    public static void transpuestaMatriz(int[][] x) {

        if (x.length == x[0].length) {
            int[][] y = new int[x.length][x[0].length];
            for (int f = 0; f < x.length; f++) {
                for (int c = 0; c < x[f].length; c++) {
                    y[f][c] = x[c][f];
                }
            }
            linea();
            System.out.println("RESULTADO TRANSPUESTA :");
            mostrarMatrizCuadricula(y);
            linea();

        } else {
            int[][] y = new int[x[0].length][x.length];
            for (int f = 0; f < x.length; f++) {
                for (int c = 0; c < x[f].length; c++) {
                    y[c][f] = x[f][c];
                }
            }
            linea();
            System.out.println("RESULTADO TRANSPUESTA :");
            mostrarMatrizCuadricula(y);
            linea();
        }

    }

    public static void productoMatrizes(int[][] x) {
        int[][] res = new int[x.length][x[0].length];
        int[][] y = generarMatriz(x.length, x[0].length);
        mostrarMatriz(x);
        linea();
        mostrarMatriz(y);
        linea();
        for (int f = 0; f < res.length; f++) {
            for (int c = 0; c < res[0].length; c++) {
                for (int k = 0; k < res.length; k++) {
                    res[f][c] = res[f][c] + x[f][k] * y[k][c];
                }
            }
        }
        linea();
        System.out.println("RESULTADO PRODUCTO MATRICES :");
        mostrarMatriz(res);
        linea();
    }

    public static void sumaMatrices(int[][] x) {
        int[][] y = generarMatriz(x.length, x[0].length);
        mostrarMatriz(x);
        linea();
        mostrarMatriz(y);
        linea();
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                y[f][c] = x[f][c] + y[f][c];
            }
        }
        linea();
        System.out.println("RESULTADO SUMA MATRICES :");
        mostrarMatriz(y);
        linea();
    }

    public static int maxMatriz(int[][] x) {
        int max;
        max = x[0][0];
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                if (max < x[f][c]) {
                    max = x[f][c];
                }
            }
        }
        return max;
    }

    public static int minMatriz(int[][] x) {
        int min;
        min = x[0][0];
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                if (min > x[f][c]) {
                    min = x[f][c];
                }
            }
        }
        return min;
    }

    public static double mediaMatriz(int[][] x) {
        double sumatorio = 0, cantidad = 0;
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                sumatorio += x[f][c];
                cantidad++;
            }
        }
        return sumatorio / cantidad;
    }

    public static int[][] generarAleatorio(int[][] x) {
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                x[f][c] = (int) (Math.random() * 9 + 1);
            }
        }

        return x;
    }

    public static int[][] generarMatriz() {
        int nF = pedirInt("numero de filas");
        int nC = pedirInt("numero de columnas");
        int[][] x = generarMatriz(nF, nC);
        return x;
    }

    public static int[][] generarMatriz(int nF, int nC) {
        int[][] x = new int[nF][nC];
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                x[f][c] = pedirInt("elemento " + '[' + f + ']' + '[' + c + ']');
            }
        }
        return x;
    }

    public static void mostrarMatriz(int[][] x) {
        for (int f = 0; f < x.length; f++) {
            for (int c = 0; c < x[f].length; c++) {
                System.out.println("Fila: " + f + " Columna: " + c + " == " + x[f][c]);
            }
        }
    }

    public static void mostrarArrayList(ArrayList lista) {

        linea("Elementos lista");
        for (int i = 0; i < lista.size(); i++) {
            System.out.print(lista.get(i) + " ");
        }
        System.out.println("");
        linea();

    }
    
}
